/*unit.h*/
#pragma once
#include "node.h"

class unit {
private:
	int list[3];  //单元节点序号对应的整体编号
	double N_matrix[9];  //形函系数矩阵
	double area = 1;  //单元面积
	double N_node_in(int inum, int flag); //局部编号形函数某一系数值
public:
	unit(node i, node j, node m);  //构造函数
	int find_index(int index);  //获取整体编号在单元内的序号
	int operator[](int index) { return this->list[index]; }; //获取节点整体编号
	double N_node(int index, int flag); //单元内整体编号对应节点形函数某一系数值(0=a,1=b,2=c)
	double N_point(int index, double x, double y); //单元内局部编号对应节点形函数在某点的值
	double B_node(int index, int f_div, int c_flag); //应变矩阵, 局部编号: f_div自由度(1=u,2=v); c_flag应变型(1=xx,2=yy,3=xy)
	double S_node(int index, int f_div, int c_flag, double E, double nu); //应力矩阵, 局部编号: f_div自由度(1=u,2=v); c_flag应力型(1=xx,2=yy,3=xy)
	double K_node(int index1, int f1, int index2, int f2, double E, double nu, double t); //刚度矩阵, f1,f2为自由度编号
};